home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-19 / iritsm3s.zip / GIF_LIB.H < prev    next >
C/C++ Source or Header  |  1991-09-11  |  8KB  |  183 lines

  1. /******************************************************************************
  2. * In order to make life a little bit easier when using the GIF file format,   *
  3. * this library was written, and which does all the dirty work...          *
  4. *                                          *
  5. *                    Written by Gershon Elber,  Jun. 1989  *
  6. *******************************************************************************
  7. * History:                                      *
  8. * 14 Jun 89 - Version 1.0 by Gershon Elber.                      *
  9. *  3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names). *
  10. ******************************************************************************/
  11.  
  12. #ifndef GIF_LIB_H
  13. #define GIF_LIB_H
  14.  
  15. #define GIF_LIB_VERSION    " Version 1.3, "
  16.  
  17. #define    GIF_ERROR    0
  18. #define GIF_OK        1
  19.  
  20. #ifndef TRUE
  21. #define TRUE        1
  22. #define FALSE        0
  23. #endif
  24.  
  25. #define GIF_FILE_BUFFER_SIZE 16384  /* Files uses bigger buffers than usual. */
  26.  
  27. typedef    int        GifBooleanType;
  28. typedef    unsigned char    GifPixelType;
  29. typedef unsigned char *    GifRowType;
  30. typedef unsigned char    GifByteType;
  31.  
  32. #define GIF_MESSAGE(Msg) fprintf(stderr, "\n%s: %s\n", PROGRAM_NAME, Msg)
  33. #define GIF_EXIT(Msg)    { GIF_MESSAGE(Msg); exit(-3); }
  34.  
  35. #ifdef VoidPtr
  36. #undef VoidPtr
  37. #endif /* VoidPtr */
  38.  
  39. #ifdef NO_VOID_PTR
  40. #define VoidPtr char *
  41. #else
  42. #define VoidPtr void *
  43. #endif /* NO_VOID_PTR */
  44.  
  45. typedef struct GifColorType {
  46.     GifByteType Red, Green, Blue;
  47. } GifColorType;
  48.  
  49. /* Note entries prefixed with S are of Screen information, while entries     */
  50. /* prefixed with I are of the current defined Image.                 */
  51. typedef struct GifFileType {
  52.     int SWidth, SHeight,                   /* Screen dimensions. */
  53.     SColorResolution, SBitsPerPixel, /* How many colors can we generate? */
  54.     SBackGroundColor,        /* I hope you understand this one... */
  55.     ILeft, ITop, IWidth, IHeight,        /* Current image dimensions. */
  56.     IInterlace,                 /* Sequential/Interlaced lines. */
  57.     IBitsPerPixel;              /* How many colors this image has? */
  58.     GifColorType *SColorMap, *IColorMap;          /* NULL if not exists. */
  59.     VoidPtr Private;      /* The regular user should not mess with this one! */
  60. } GifFileType;
  61.  
  62. typedef enum {
  63.     UNDEFINED_RECORD_TYPE,
  64.     SCREEN_DESC_RECORD_TYPE,
  65.     IMAGE_DESC_RECORD_TYPE,                   /* Begin with ',' */
  66.     EXTENSION_RECORD_TYPE,                   /* Begin with '!' */
  67.     TERMINATE_RECORD_TYPE                   /* Begin with ';' */
  68. } GifRecordType;
  69.  
  70. /* DumpScreen2Gif routine constants identify type of window/screen to dump.  */
  71. /* Note all values below 1000 are reserved for the IBMPC different display   */
  72. /* devices (it has many!) and are compatible with the numbering TC2.0        */
  73. /* (Turbo C 2.0 compiler for IBM PC) gives to these devices.             */
  74. typedef enum {
  75.     GIF_DUMP_SGI_WINDOW = 1000,
  76.     GIF_DUMP_X_WINDOW = 1001
  77. } GifScreenDumpType;
  78.  
  79. /******************************************************************************
  80. * O.k. here are the routines one can access in order to encode GIF file:      *
  81. * (GIF_LIB file EGIF_LIB.C).                              *
  82. ******************************************************************************/
  83.  
  84. GifFileType *EGifOpenFileName(char *GifFileName, int GifTestExistance);
  85. GifFileType *EGifOpenFileHandle(int GifFileHandle);
  86. void EGifSetGifVersion(char *Version);
  87. int EGifPutScreenDesc(GifFileType *GifFile,
  88.     int GifWidth, int GifHeight, int GifColorRes, int GifBackGround,
  89.     int GifBitsPerPixel, GifColorType *GifColorMap);
  90. int EGifPutImageDesc(GifFileType *GifFile,
  91.     int GifLeft, int GifTop, int Width, int GifHeight, int GifInterlace,
  92.     int GifBitsPerPixel, GifColorType *GifColorMap);
  93. int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
  94. int EGifPutPixel(GifFileType *GifFile, GifPixelType GifPixel);
  95. int EGifPutComment(GifFileType *GifFile, char *GifComment);
  96. int EGifPutExtension(GifFileType *GifFile, int GifExtCode, int GifExtLen,
  97.                             VoidPtr GifExtension);
  98. int EGifPutCode(GifFileType *GifFile, int GifCodeSize,
  99.                            GifByteType *GifCodeBlock);
  100. int EGifPutCodeNext(GifFileType *GifFile, GifByteType *GifCodeBlock);
  101. int EGifCloseFile(GifFileType *GifFile);
  102.  
  103. #define    E_GIF_ERR_OPEN_FAILED    1        /* And EGif possible errors. */
  104. #define    E_GIF_ERR_WRITE_FAILED    2
  105. #define E_GIF_ERR_HAS_SCRN_DSCR    3
  106. #define E_GIF_ERR_HAS_IMAG_DSCR    4
  107. #define E_GIF_ERR_NO_COLOR_MAP    5
  108. #define E_GIF_ERR_DATA_TOO_BIG    6
  109. #define E_GIF_ERR_NOT_ENOUGH_MEM 7
  110. #define E_GIF_ERR_DISK_IS_FULL    8
  111. #define E_GIF_ERR_CLOSE_FAILED    9
  112. #define E_GIF_ERR_NOT_WRITEABLE    10
  113.  
  114. /******************************************************************************
  115. * O.k. here are the routines one can access in order to decode GIF file:      *
  116. * (GIF_LIB file DGIF_LIB.C).                              *
  117. ******************************************************************************/
  118.  
  119. GifFileType *DGifOpenFileName(char *GifFileName);
  120. GifFileType *DGifOpenFileHandle(int GifFileHandle);
  121. int DGifGetScreenDesc(GifFileType *GifFile);
  122. int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType);
  123. int DGifGetImageDesc(GifFileType *GifFile);
  124. int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
  125. int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel);
  126. int DGifGetComment(GifFileType *GifFile, char *GifComment);
  127. int DGifGetExtension(GifFileType *GifFile, int *GifExtCode,
  128.                         GifByteType **GifExtension);
  129. int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension);
  130. int DGifGetCode(GifFileType *GifFile, int *GifCodeSize,
  131.                         GifByteType **GifCodeBlock);
  132. int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock);
  133. int DGifGetLZCodes(GifFileType *GifFile, int *GifCode);
  134. int DGifCloseFile(GifFileType *GifFile);
  135.  
  136. #define    D_GIF_ERR_OPEN_FAILED    101        /* And DGif possible errors. */
  137. #define    D_GIF_ERR_READ_FAILED    102
  138. #define    D_GIF_ERR_NOT_GIF_FILE    103
  139. #define D_GIF_ERR_NO_SCRN_DSCR    104
  140. #define D_GIF_ERR_NO_IMAG_DSCR    105
  141. #define D_GIF_ERR_NO_COLOR_MAP    106
  142. #define D_GIF_ERR_WRONG_RECORD    107
  143. #define D_GIF_ERR_DATA_TOO_BIG    108
  144. #define D_GIF_ERR_NOT_ENOUGH_MEM 109
  145. #define D_GIF_ERR_CLOSE_FAILED    110
  146. #define D_GIF_ERR_NOT_READABLE    111
  147. #define D_GIF_ERR_IMAGE_DEFECT    112
  148. #define D_GIF_ERR_EOF_TOO_SOON    113
  149.  
  150. /******************************************************************************
  151. * O.k. here are the routines from GIF_LIB file QUANTIZE.C.              *
  152. ******************************************************************************/
  153. int QuantizeBuffer(unsigned int Width, unsigned int Height, int *ColorMapSize,
  154.     GifByteType *RedInput, GifByteType *GreenInput, GifByteType *BlueInput,
  155.     GifByteType *OutputBuffer, GifColorType *OutputColorMap);
  156.  
  157.  
  158. /******************************************************************************
  159. * O.k. here are the routines from GIF_LIB file QPRINTF.C.              *
  160. ******************************************************************************/
  161. extern int GifQuitePrint;
  162.  
  163. #ifdef USE_VARARGS
  164. void GifQprintf();
  165. #else
  166. void GifQprintf(char *Format, ...);
  167. #endif /* USE_VARARGS */
  168.  
  169. /******************************************************************************
  170. * O.k. here are the routines from GIF_LIB file GIF_ERR.C.              *
  171. ******************************************************************************/
  172. void PrintGifError(void);
  173. int GifLastError(void);
  174.  
  175. /******************************************************************************
  176. * O.k. here are the routines from GIF_LIB file DEV2GIF.C.              *
  177. ******************************************************************************/
  178. int DumpScreen2Gif(char *FileName, int ReqGraphDriver, int ReqGraphMode1,
  179.                                int ReqGraphMode2,
  180.                                int ReqGraphMode3);
  181.  
  182. #endif /* GIF_LIB_H */
  183.